import { TMap } from '../map'
import { LngLat } from '../entity/lngLat'
import { Circle, CircleOptions } from '../covering/circle'

/**
 * 创建画圆工具时的属性对象
 */
export type CircleToolOptions = CircleOptions

/**
 * 画圆工具件工厂对象
 */
type CircleToolEventFactory = {
    /**
     * 用户拖动绘制圆时触发
     *
     * ---
     *
     * - 特殊参数说明：
     *
     * `currentCenter`：中心点的地理坐标。
     *
     * `currentRadius`：半径，单位为米。
     *
     * `currentCircle`：用户最后绘制的圆对象。
     *
     * `allCircles`：用户所有绘制的圆对象
     */
    draw: (event: { type: 'draw', target: CircleTool, currentCenter: LngLat, currentRadius: number, currentCircle: Circle, allCircles: Array<Circle> }) => void;

    /**
     * 用户完成绘制圆时触发
     *
     * ---
     *
     * - 特殊参数说明：
     *
     * `currentCenter`：中心点的地理坐标。
     *
     * `currentRadius`：半径，单位为米。
     *
     * `currentCircle`：用户最后绘制的圆对象。
     *
     * `allCircles`：用户所有绘制的圆对象
     */
    drawend: (event: { type: 'draw', target: CircleTool, currentCenter: LngLat, currentRadius: number, currentCircle: Circle, allCircles: Array<Circle> }) => void;
}

/**
 * 画圆工具，用来实现在地图上画圆的功能
 */
export interface CircleTool {
    /**
     * 创建一个画圆工具
     *
     * @param map 地图对象
     *
     * @param opts 属性对象
     */
    new(map: TMap, opts?: CircleToolOptions): CircleTool;

    /**
     * 清空工具中所有绘制的圆
     */
    clear: () => void;
    /**
     * 开启画圆工具
     */
    open: () => boolean;
    /**
     * 关闭画圆工具
     */
    close: () => void;

    /**
     * 添加事件监听函数
     */
    addEventListener: <Event extends keyof CircleToolEventFactory>(event: Event, handler: CircleToolEventFactory[Event]) => void;

    /**
     * 移除事件监听函数
     */
    removeEventListener: <Event extends keyof CircleToolEventFactory>(event: Event, handler: CircleToolEventFactory[Event]) => void
}
